りおんクロニクル


SQLite × マイグレーション戦略|安全なスキーマ変更の完全ガイド【2026年版】

Home【2026年版】C# / .NET入門と実践ガイド|基礎・業務アプリ開発・SQLite連携まで体系的に解説

SQLiteは軽量で扱いやすい一方、スキーマ変更(マイグレーション)が難しいDBです。 特に業務アプリでは、データを壊さず安全に更新する仕組みが必須になります。 この記事では、SQLiteでのスキーマ変更を安全に行うための実務向けマイグレーション戦略をまとめます。

この記事でわかること
・SQLiteのスキーマ変更が難しい理由
・ALTER TABLE の制限と回避策
・テーブル再作成パターン(公式推奨)
・EF Core Migrations の注意点
・バージョン管理と安全な更新手順
・業務アプリ向けベストプラクティス

1. SQLiteのスキーマ変更が難しい理由

SQLiteは他のRDBMSと違い、ALTER TABLE の機能が非常に限定的です。

■ できること

■ できないこと(重要)

結論: SQLiteで複雑なスキーマ変更をする場合、 テーブル再作成(リビルド)が基本戦略になります。

2. SQLite公式推奨:テーブル再作成パターン

SQLiteの公式ドキュメントでも、複雑な変更は 「新しいテーブルを作ってデータを移す」方法が推奨されています。

■ テーブル再作成の手順

BEGIN TRANSACTION;

-- 1. 新しいテーブルを作成
CREATE TABLE Users_new (
    Id INTEGER PRIMARY KEY,
    Name TEXT NOT NULL,
    Age INTEGER,
    Email TEXT  -- 新しい列
);

-- 2. 旧テーブルからデータ移行
INSERT INTO Users_new (Id, Name, Age)
SELECT Id, Name, Age FROM Users;

-- 3. 旧テーブル削除
DROP TABLE Users;

-- 4. 新テーブルをリネーム
ALTER TABLE Users_new RENAME TO Users;

COMMIT;

■ メリット

3. EF Core Migrations を使う場合の注意点

EF Core の Migrations は便利ですが、 SQLiteでは一部の操作が自動生成されません

■ 例:列削除は自動生成されない

migrationBuilder.DropColumn("OldColumn", "Users");

SQLiteではこの操作は実行できず、例外が発生します。

■ EF Core が自動生成するのは「テーブル再作成」

EF Core は SQLite の制限を理解しており、 必要に応じて新テーブル作成 → データ移行 → 旧テーブル削除を自動生成します。

■ ただし注意

4. スキーマ変更のバージョン管理

業務アプリでは、DBスキーマのバージョン管理が必須です。

■ バージョン管理テーブルを作る

CREATE TABLE SchemaVersion (
    Version INTEGER NOT NULL
);

■ アプリ起動時にバージョンを確認

var version = db.SchemaVersion.First().Version;

if (version < 2)
{
    // マイグレーション処理
}

■ マイグレーション後にバージョン更新

UPDATE SchemaVersion SET Version = 2;

これにより、アプリ起動時に自動でスキーマ更新が可能になります。

5. スキーマ変更の安全な手順(実務向け)

① バックアップを取る(必須)

SQLiteはファイルコピーだけでバックアップ可能。

② トランザクションで囲む

BEGIN TRANSACTION;
-- スキーマ変更
COMMIT;

③ 新テーブル作成 → データ移行 → 旧テーブル削除

④ 外部キー制約を一時的にOFFにする(必要な場合)

PRAGMA foreign_keys = OFF;
-- スキーマ変更
PRAGMA foreign_keys = ON;

⑤ バージョン番号を更新

⑥ アプリ側でキャッシュやモデルを更新

6. よくあるスキーマ変更と対応表

やりたいことSQLiteでの方法
列を追加ALTER TABLE ADD COLUMN
列を削除テーブル再作成
列の型変更テーブル再作成
NOT NULL追加テーブル再作成
UNIQUE追加テーブル再作成
外部キー追加テーブル再作成
複合インデックス追加CREATE INDEX

7. 業務アプリ向けベストプラクティス

まとめ:SQLiteのスキーマ変更は“慎重に・計画的に”

SQLiteは軽量で扱いやすい反面、 スキーマ変更は他のDBより難しいという特徴があります。 この記事の戦略を使えば、データを壊さず安全にマイグレーションを行えます。

前のページ  次のページ